package com.sxt.disruptor.chap01;

import java.nio.ByteBuffer;

import com.lmax.disruptor.RingBuffer;

/**
 * 	生产者组件，向Disruptor容器中去投递数据 
 * @author Administrator
 *
 */
public class OrderEventProducer {
	private RingBuffer<OrderEvent> ringBuffer;

    public OrderEventProducer(RingBuffer<OrderEvent> ringBuffer) {
        this.ringBuffer = ringBuffer;
    }

    public void sendData(ByteBuffer data) {

        //1 在生产者发送消息的时候，首先需要从 ringBuffer 中获取一个可用的序号
        long sequence = ringBuffer.next();
        try {
            //2 根据这个序号找到具体的 OrderEvent 元素,草地上获取的OrderEvent对象是一个没有被赋值的空对象
            OrderEvent orderEvent = ringBuffer.get(sequence);

            //3 进行时间赋值处理
            orderEvent.setValue(data.getLong(0));
        } finally {
            //4 提交操作
            ringBuffer.publish(sequence);
        }
    }
}
